home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / execd1200.iso / Shareware / Blocks 3 / setup.exe / Source / DOOR.C < prev    next >
Encoding:
C/C++ Source or Header  |  2000-10-03  |  3.3 KB  |  124 lines

  1. #include <allegro.h>
  2. #include <jgmod.h>
  3. #include <blocks3.h>
  4.  
  5. int map_backup[20][15][2];
  6.  
  7. void Door(void)
  8. {
  9.  int i, j, k;
  10.  
  11.  for (k = 0; k < 2; k++)
  12.  for (j = 0; j < 15; j++)
  13.  for (i = 0; i < 20; i++)
  14.  map_backup[i][j][k] = map_door[i][j][k];
  15.  
  16.  for (i = 0; i < switches_count; i++)
  17.  {
  18.   if (map[switches[i].x][switches[i].y][switches[i].z] & SWITCH)
  19.     map[switches[i].x][switches[i].y][switches[i].z] = 0;
  20.  }
  21.  
  22.  i = 0;
  23.  while (((switches[i].c != RED) ||
  24.          (map[switches[i].x][switches[i].y][switches[i].z]) ||
  25.          (Player_On(switches[i].x, switches[i].y, 0)) ||
  26.          (Player_On(switches[i].x, switches[i].y, 1))) &&
  27.  
  28.          (i < switches_count))
  29.  i++;
  30.  
  31.  if (i == switches_count) Open_Doors(RED);
  32.  else Close_Doors(RED);
  33.  
  34.  i = 0;
  35.  while (((switches[i].c != GREEN) ||
  36.          (map[switches[i].x][switches[i].y][switches[i].z]) ||
  37.          (Player_On(switches[i].x, switches[i].y, 0)) ||
  38.          (Player_On(switches[i].x, switches[i].y, 1))) &&
  39.          (i < switches_count))
  40.  i++;
  41.  
  42.  if (i == switches_count) Open_Doors(GREEN);
  43.  else Close_Doors(GREEN);
  44.  
  45.  i = 0;
  46.  while (((switches[i].c != BLUE) ||
  47.          (map[switches[i].x][switches[i].y][switches[i].z]) ||
  48.          (Player_On(switches[i].x, switches[i].y, 0)) ||
  49.          (Player_On(switches[i].x, switches[i].y, 1))) &&
  50.          (i < switches_count))
  51.  i++;
  52.  
  53.  if (i == switches_count) Open_Doors(BLUE);
  54.  else Close_Doors(BLUE);
  55.  
  56.  for (k = 0; k < 2; k++)
  57.  for (j = 0; j < 15; j++)
  58.  for (i = 0; i < 20; i++)
  59.  if (map_backup[i][j][k] != map_door[i][j][k])
  60.  {
  61.   if (map_door[i][j][k] == 0) DirtyList(i*32, j*32, k*8, 32, 40, blank);
  62.   if (map_door[i][j][k] == RED) DirtyList(i*32, j*32, k*8, 32, 40, door_pic[0]);
  63.   if (map_door[i][j][k] == GREEN) DirtyList(i*32, j*32, k*8, 32, 40, door_pic[1]);
  64.   if (map_door[i][j][k] == BLUE) DirtyList(i*32, j*32, k*8, 32, 40, door_pic[2]);
  65.  }
  66.  
  67.  for (i = 0; i < switches_count; i++)
  68.  {
  69.   if (map[switches[i].x][switches[i].y][switches[i].z] == 0)
  70.   {
  71.    map[switches[i].x][switches[i].y][switches[i].z] = switches[i].c + SWITCH;
  72.    DirtyList(switches[i].x*32, switches[i].y*32, switches[i].z*8, 32, 40, blank);
  73.   }
  74.  }
  75. }
  76.  
  77. void Open_Doors(int c)
  78. {
  79.  int i;
  80.  
  81.  for (i = 0; i < door_count; i++)
  82.  {
  83.   if ((door[i].c == c) && (map[door[i].x][door[i].y][door[i].z] & DOOR))
  84.   {
  85.    map[door[i].x][door[i].y][door[i].z] = 0;
  86.    map_door[door[i].x][door[i].y][door[i].z] = 0;
  87.   }
  88.  }
  89. }
  90.  
  91. void Close_Doors(int c)
  92. {
  93.  int i;
  94.  
  95.  for (i = 0; i < door_count; i++)
  96.  {
  97.   if ((door[i].c == c) && (map[door[i].x][door[i].y][door[i].z] == 0))
  98.   {
  99.    map[door[i].x][door[i].y][door[i].z] = DOOR+CLOSE+FULL+c;
  100.    map_door[door[i].x][door[i].y][door[i].z] = c;
  101.   }
  102.  }
  103. }
  104.  
  105. int Player_On(int x, int y, int p_no)
  106. {
  107.  int i;
  108.  
  109.  if ((ply[p_no].x/32 == x) && (ply[p_no].y/32 == y)) return 1;
  110.  if (((ply[p_no].x + 31)/32 == x) && (ply[p_no].y/32 == y)) return 1;
  111.  if ((ply[p_no].x/32 == x) && ((ply[p_no].y + 31)/32 == y)) return 1;
  112.  if (((ply[p_no].x/32 + 31) == x) && ((ply[p_no].y + 31)/32 == y)) return 1;
  113.  
  114.  for (i = 0; i < mon_count; i++)
  115.  {
  116.   if ((mon[i].x/32 == x) && (mon[i].y/32 == y)) return 1;
  117.   if (((mon[i].x + 31)/32 == x) && (mon[i].y/32 == y)) return 1;
  118.   if ((mon[i].x/32 == x) && ((mon[i].y + 31)/32 == y)) return 1;
  119.   if (((mon[i].x/32 + 31) == x) && ((mon[i].y + 31)/32 == y)) return 1;
  120.  }
  121.  
  122.  return 0;
  123. }
  124.